﻿using famails.App_Code.source.dto;
using famails.bus;
using famails.dto;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace famails.BackEnd.Customer
{
    public partial class Discount : System.Web.UI.Page
    {
        static log4net.ILog logs = log4net.LogManager.GetLogger("ErrorRollingLogFileAppender");
        static UserLoginDTO userLogin = null;
        CM_DiscountBUS bus = new CM_DiscountBUS();
        protected void Page_Load(object sender, EventArgs e)
        {
            userLogin = getUserLogin();
            if (!IsPostBack)
            {
                fromdate.Value = todate.Value = DateTime.Now.ToString("yyyy/MM/dd");
                decimal id = 0;
                decimal.TryParse(Request.QueryString["Id"], out id);
                if (id > 0)
                {
                    hdfDiscountId.Value = id + "";
                    Load4Edit(id);
                }
            }
        }

        void Load4Edit(decimal id)
        {
            try
            {
                if (id > 0)
                {
                    DataTable source = bus.GetByID(id, userLogin.UserId);
                    if (source != null && source.Rows.Count > 0)
                    {
                        txtName.Text = source.Rows[0]["DiscountName"] + "";
                        txtCode.Text = source.Rows[0]["DiscountCode"] + "";
                        txtDiscount.Text = source.Rows[0]["DiscountValue"] + "";
                        txtNotes.Text = source.Rows[0]["Notes"] + "";
                        txtMinAmount.Text = source.Rows[0]["MinAmount"] + "";
                        txtNumberOfCode.Text = source.Rows[0]["NumberOfCode"] + "";
                        if (source.Rows[0]["Fix0_Per1"] + "" == "0")
                            rdValue.Checked = true;
                        fromdate.Value = Convert.ToDateTime(source.Rows[0]["FromDate"]).ToString("yyyy/MM/dd");
                        todate.Value = Convert.ToDateTime(source.Rows[0]["ToDate"]).ToString("yyyy/MM/dd");
                        Button3.Disabled = true;
                    }

                    if (source == null || source.Rows.Count == 0)
                    {
                        pnError.Visible = true;
                        lblError.Text = "Dữ liệu không tồn tại";
                        return;
                    }
                }
                if (id <= 0)
                {
                    pnError.Visible = true;
                    lblError.Text = "Dữ liệu không tồn tại";
                    return;
                }
            }
            catch (Exception ex)
            {

                pnSuccess.Visible = false;
                pnError.Visible = true;
                lblError.Text = " Đã xảy ra lỗi trong quá trình thực hiện. Vui lòng thử lại !<br/>" + ex.Message;
                logs.Error(userLogin.Username + "-Discount- LoadEdit", ex);
            }
        }

        private UserLoginDTO getUserLogin()
        {
            if (Session["us-login"] != null)
            {
                return (UserLoginDTO)Session["us-login"];
            }
            else Response.Redirect("~");
            return null;
        }

        protected void btnRefesh_Click(object sender, EventArgs e)
        {
            decimal id = 0;
            decimal.TryParse(Request.QueryString["Id"], out id);
            if (id == 0)
                txtCode.Text = txtDiscount.Text = txtName.Text = "";
            else Load4Edit(id);
            pnError.Visible = pnSuccess.Visible = false;
        }

        protected void btnAdd_Click(object sender, EventArgs e)
        {
            pnError.Visible = false;
            pnSuccess.Visible = false;
            try
            {
                if (CheckBeforeSave())
                {
                    int id = 0;
                    int.TryParse(hdfDiscountId.Value, out id);
                    CM_DiscountDTO dto = new CM_DiscountDTO();
                    dto.DiscountID = id;
                    dto.DiscountName = txtName.Text;
                    dto.DiscountCode = txtCode.Text;
                    dto.Notes = txtNotes.Text;
                    dto.FromDate = common.Common.convertStringToDate(fromdate.Value).Value;
                    dto.ToDate = common.Common.convertStringToDate(todate.Value).Value;
                    dto.DiscountValue = Convert.ToDecimal(txtDiscount.Text);
                    dto.MinAmount = Convert.ToDecimal(txtMinAmount.Text);
                    dto.NumberOfCode = Convert.ToInt32(txtNumberOfCode.Text);
                    dto.Fix0_Per1 = rdValue.Checked?0:1;
                    if (id == 0)
                    {
                        dto.CreateBy = userLogin.UserId;
                        hdfDiscountId.Value = bus.Insert(dto) + "";
                    }
                    else bus.Edit(dto);

                    pnSuccess.Visible = true;
                    lblSuccess.Text = "Thêm mới thành công";
                    if (id > 0)
                        lblSuccess.Text = "Cập nhật thành công";
                }
            }
            catch (Exception ex)
            {
                logs.Error(userLogin.Username + "-Discount - btnAdd_Click", ex);
                pnError.Visible = true;
                lblError.Text = "Lưu dữ liệu không thành công!" + ex.Message.ToString();
            }
        }

        bool CheckBeforeSave()
        {

            decimal id = 0;
            string errorMessage = "";
            if (txtName.Text == "")
                errorMessage = "Chưa nhập tên khuyến mãi";
            else if (txtCode.Text == "")
                errorMessage = "Chưa nhập mã khuyến mãi";
            
            //else if (txtCode.Text != "")
            //{
            //    decimal.TryParse(hdfDiscountId.Value, out id);
            //    if (bus.CheckExistsCode(txtCode.Text, id, userLogin.UserId))
            //        errorMessage = "Trùng mã khuyến mãi";
            //}
            else
            {
                id = 0;
                decimal.TryParse(txtDiscount.Text, out id);
                if (id < 0)
                    errorMessage = "Giá trị khuyến mãi không hợp lệ";
                id = 0;
                decimal.TryParse(txtNumberOfCode.Text, out id);
                if (id < 0)
                    errorMessage = "Số lượng mã khuyến mãi không hợp lệ";
            }
            if (errorMessage.Length > 0)
            {
                pnError.Visible = true;
                lblError.Text = errorMessage;
                return false;
            }
            return true;
        }

        protected void btnGenerate_Click(object sender, EventArgs e)
        {
            pnError.Visible = false;
            pnSuccess.Visible = false;
            try
            {
                int i=0;
                if (int.TryParse(txtNumberOfCode.Text, out i) && i > 0)
                {
                    string code = "";
                    for(int j=0;j<i;j++)
                    {
                        code += GetRandomString(10)+";";
                    }
                    txtCode.Text = code;
                }
                else
                {
                    pnError.Visible = true;
                    lblError.Text = "Số lượng mã khuyến mãi không hợp lệ!";
                }
            }
            catch (Exception ex)
            {
                logs.Error(userLogin.Username + "-Discount - btnAdd_Click", ex);
                pnError.Visible = true;
                lblError.Text = "Lưu dữ liệu không thành công!" + ex.Message.ToString();
            }
        }
        private string RandomString(int Size)
        {
            string input = "abcdefghijklmnopqrstuvwxyz0123456789";
            StringBuilder builder = new StringBuilder();
            string ch;
            for (int i = 0; i < Size; i++)
            {
                int index = new Random().Next(0, input.Length);
                ch = input.Substring(index,1);
                builder.Append(index+"");
            }
            return builder.ToString();
        }
        public static string GetRandomString(int Size)
        {
            string path = Path.GetRandomFileName();
            path = path.Replace(".", ""); // Remove period.
            return path.Substring(0,Size).ToUpper();
        }
    }
}